//
// Created by liz on 24-11-28.
//

#ifndef CHASSIS_H
#define CHASSIS_H

typedef struct {
    struct {
        // 车体在世界坐标系下的位置和姿态
        struct {
            float x, y;                // 车体在世界坐标系中的位置
            float yaw_angle, yaw_total; // 车体的偏航角和多圈偏航角
        } position;

        // 车体在世界坐标系下的速度（可以通过车体坐标系下的速度通过转换得到）
        struct {
            float x, y;                // 车体在世界坐标系下的线性速度
            float yaw;                 // 车体在世界坐标系下的角速度
        } velocity;

    } world_coordinate;

    struct {
        // 车体在车体坐标系下的位置（通常，车体坐标系的原点就是车体的中心）
        struct {
            float x, y;  // 车体坐标系下的位置
            float yaw;   // 偏航角（车体坐标系下的方向）
        } position;

        // 车体在车体坐标系下的速度（相对于车体坐标系）
        struct {
            float v_x, v_y;  // 车体坐标系下的线性速度
            float omega;     // 车体坐标系下的角速度（绕Z轴旋转）
        } velocity;

        // 轮子速度（在车体坐标系下）
        struct {
            float V_FL, V_FR, V_RL, V_RR; // 四个麦克纳姆轮的速度
        } wheel_speeds;

    } chassis_coordinate;
} Chassis_State_s;


void Chassis_Init(void);

void Chassis_Task();

void Chassis_Start();

#endif //CHASSIS_H
